#include "../../lv_examples.h"
#if LV_USE_CHECKBOX && LV_BUILD_EXAMPLES

static void event_handler(lv_event_t * e)
{   
    // 获取事件的类型
    lv_event_code_t code = lv_event_get_code(e);
    // 获取事件的对象
    lv_obj_t * obj = lv_event_get_target(e);
    // 判断事件类型
    if(code == LV_EVENT_VALUE_CHANGED) {
        const char * txt = lv_checkbox_get_text(obj);
        //lv_obj_get_state(obj)此函数返回一个位掩码，与选中掩码按位与，判读当前复选框是否被选中
        const char * state = lv_obj_get_state(obj) & LV_STATE_CHECKED ? "Checked" : "Unchecked";
        //任务日志显示
        LV_LOG_USER("%s: %s", txt, state);
    }
}

void lv_example_checkbox_1(void)
{   
    // 用于设置 Flex 容器的流（flow）属性，即项目的排列方向，此处为从上到下排列
    lv_obj_set_flex_flow(lv_scr_act(), LV_FLEX_FLOW_COLUMN);
    // 用于设置 Flex 容器的对齐方式，主轴的方向由 LV_FLEX_FLOW_COLUMN 决定，因此这里是指垂直方向上居中。。
    lv_obj_set_flex_align(lv_scr_act(), LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_START, LV_FLEX_ALIGN_CENTER);

    // 创建复选框
    lv_obj_t * cb;
    cb = lv_checkbox_create(lv_scr_act());
    // 设置复选框的文本
    lv_checkbox_set_text(cb, "Apple");
    // 未设置复选框开始阶段显示，默认为为未选中状态

    // 添加事件回调，此处任意事件发生都会进入回调
    lv_obj_add_event_cb(cb, event_handler, LV_EVENT_ALL, NULL);

    // 创建复选框
    cb = lv_checkbox_create(lv_scr_act());
    // 设置复选框的文本
    lv_checkbox_set_text(cb, "Banana");
    // 设置复选框开始阶段显示为选中状态
    lv_obj_add_state(cb, LV_STATE_CHECKED);
    // 添加事件回调，此处任意事件发生都会进入回调
    lv_obj_add_event_cb(cb, event_handler, LV_EVENT_ALL, NULL);
    
    // 创建复选框
    cb = lv_checkbox_create(lv_scr_act());
    // 设置复选框的文本
    lv_checkbox_set_text(cb, "Lemon");
    // 未设置复选框开始阶段显示，默认为为未选中状态

    // 设置复选框为禁用状态
    lv_obj_add_state(cb, LV_STATE_DISABLED);
    // 添加事件回调，此处任意事件发生都会进入回调
    lv_obj_add_event_cb(cb, event_handler, LV_EVENT_ALL, NULL);

    // 创建复选框
    cb = lv_checkbox_create(lv_scr_act());
    // 设置复选框为选中禁用状态
    lv_obj_add_state(cb, LV_STATE_CHECKED | LV_STATE_DISABLED);
    // 设置复选框的文本
    lv_checkbox_set_text(cb, "Melon\nand a new line");
    // 添加事件回调，此处任意事件发生都会进入回调
    lv_obj_add_event_cb(cb, event_handler, LV_EVENT_ALL, NULL);
    // 更新布局
    lv_obj_update_layout(cb);
}

#endif
